package com.yupi.yuapiinterface.controller;


import com.yupi.yuapiclientsdk.model.User;
import com.yupi.yuapiclientsdk.utils.SignUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;


/**
 * 名称api
 */
@RestController // 返回json
@RequestMapping("/name") // 请求路径前缀
public class NameController {

    @GetMapping("/get") // 请求路径
    public String getNameByGet(String name, HttpServletRequest request) {
        System.out.println(request.getHeader("yupi"));
        return "GET 你的名字是: " + name;
    }

    @PostMapping("/post") // 请求路径
    public String getNameByPost(@RequestParam String name) {
        return "POST 你的名字是: " + name;
    }

    @PostMapping("/user") // 请求路径
    public String getUsernameByPost(@RequestBody User user, HttpServletRequest request) {
        String accessKey = request.getHeader("accessKey");
        String nonce = request.getHeader("nonce");
        String timestamp = request.getHeader("timestamp");
        String sign = request.getHeader("sign");
        String body = request.getHeader("body");

        // todo 实际情况应该是去数据库中查询是否已经分配给用户
        if (!accessKey.equals("yupi")) {
            throw new RuntimeException("无权限");
        }
        if (Long.parseLong(nonce) > 10000L) {
            throw new RuntimeException("无权限");
        }
        // todo 时间和当前时间不能超过 5 分钟 时间规则没实现 后续补
//        if (timestamp != null) {
//            // 将时间戳中的&quot;字符替换为空字符串
//            timestamp = timestamp.replace("&quot;", "");
//            // 将时间戳转换为Date对象
//            Date date = new Date(Long.parseLong(timestamp));
//            // 获取当前时间
//            Date now = new Date();
//            // 计算时间差（以分钟为单位）
//            long minutesBetween = DateUtil.between(date, now, DateUnit.MINUTE);
//            // 检查时间差是否小于或等于5分钟
//            if (minutesBetween > 5) {
//                throw new RuntimeException("时间不在当前时间的前5分钟内。");
//            }
//        }
        // todo 实际情况是从数据库查出secretKey
        String serverSign = SignUtils.genSign(body, "abcdefgh");
        if (!sign.equals(serverSign)) {
            throw new RuntimeException("无权限");
        }
        String result = "POST 用户名字是: " + user.getUsername();
        // 调用成功后 次数+1
        return result;
    }
}
